#include "labelimagemfase.h"

#include <QDebug>
#include <QErrorMessage>
#include "enums.h"
#include "exception.h"

LabelImagemFase::LabelImagemFase(QWidget *parent) :
    QLabel(parent)
{
    this->setGeometry(70, 20, editacao::WIDTH_FASE, editacao::HEIGHT_FASE);
    this->imagemPixmap = new QPixmap(":img/img/floor.png");
    *this->imagemPixmap = this->imagemPixmap->scaled(editacao::WIDTH_FASE, editacao::HEIGHT_FASE);
    this->editorDeFase = new EditorDeFase(this->imagemPixmap);
    this->setPixmap(*this->editorDeFase->imagemFasePixmap());
}

LabelImagemFase::~LabelImagemFase()
{
    delete this->editorDeFase;
}

void LabelImagemFase::trocaElementoDeFase(QAction *action)
{
    editacao::Elementos elemento;
    QString nomeElemento = action->iconText();

    if(nomeElemento == "Caixa") elemento = editacao::CAIXA;
    else if(nomeElemento == "Heroi") elemento = editacao::HEROI;
    else if(nomeElemento == "Chao") elemento = editacao::CHAO;
    else if(nomeElemento == "Parede") elemento = editacao::PAREDE;
    else if(nomeElemento == "Ponto X") elemento = editacao::PONTOX;

    QImage tempImage = action->icon().pixmap(editacao::WIDTH_ELEMENTOS, editacao::HEIGHT_ELEMENTOS).toImage();
    this->editorDeFase->setElementoDeFase(ElementoDeFase(tempImage, elemento));
}

void LabelImagemFase::mousePressEvent(QMouseEvent *ev)
{
    QPoint point = ev->pos();
    point.setX(point.x() - (point.x() % editacao::WIDTH_ELEMENTOS));
    point.setY(point.y() - (point.y() % editacao::HEIGHT_ELEMENTOS));
    this->editorDeFase->setPontoDeRepaint(point);
    try{
        this->editorDeFase->atualizaFase();
        this->setPixmap(*this->editorDeFase->imagemFasePixmap());
    }catch(Exception e){
        QString msg = e.msg();
        this->mostraMsgErro(msg);
    }

}

void LabelImagemFase::salvaImagem(QString &path)
{
    try{
        this->editorDeFase->salvar(path);
    }catch(Exception e){
        QString msg = e.msg();
        this->mostraMsgErro(msg);
    }
}

void LabelImagemFase::mostraMsgErro(const QString &msg)
{
    QErrorMessage errorMessage;
    errorMessage.setWindowIcon(QIcon(":img/img/icon.png"));
    errorMessage.setWindowTitle("Erro");
    errorMessage.showMessage(msg);
    errorMessage.exec();
}
